====== Persönliche Auswertung für den Teilnehmer ======

Mithilfe der Funktionen ''[[:de:create:functions:value]]'', ''[[:de:create:functions:valueMean]]'' lassen sich die Antworten eines Teilnehmers schon während der Befragung auswerten (s. auch [[points]]). Einige Frage, wie z.B. der [[:de:create:questions:iat]] liefern auch direkt eine Auswertung. Mithilfe von ''[[:de:create:functions:statistic]]'' sind zudem Auswertungen über alle bisherigen Teilnehmer möglich.

**Hinweis:** Diese Anleitung zeigt, wie Feedback innerhalb bzw. am Ende eines Fragebogens angezeigt werden kann. Mithilfe des Zusatzmoduls für die [[:de:results:analyses|automatische Datenauswertung]] ist es auch möglich, ein PDF mit persönlicher Auswertung zum Download anzubieten, vgl. [[:de:results:report]].

**Hinweis:** Wie man den Befragten Feedback auf einzelne Fragen geben kann (richtig/falsch), wird in einer separaten Anleitung erklärt: [[:de:create:feedback-correct]]

**Hinweis:** Ebenfalls eine separate Anleitung erklärt, wie man einer Person eine Druckansicht ihrer eigenen Antworten ("ausgefüllten Fragebogen zum Ausdrucken/Speichern") anbieten kann: ''[[:de:create:functions:answersprint]]''

===== Darstellung in Textform =====

Als Text lassen sich diese Ergebnisse einfach darstellen. Die Funktion ''[[http://php.net/manual/de/function.sprintf.php|sprintf()]]'' erleichtert das Formatieren von Dezimalzahlen. Mit ''sprintf('%1.2f', $value)'' wird die Dezimalzahl ''$value'' so formatiert, dass zwei Nachkommastellen dargestellt werden.

==== Einzelne Werte (I) ====

Einzelne Werte lassen sich am einfachsten mittels ''[[:de:create:functions:html]]'' ausgeben. Mit einem Punkt (''.'') können Strings (z.B. Fragemente von HTML-Code und die Werte, die anzuzeigen sind) verbunden werden.

<code php>
$value = valueMean('AB01');
html('
  <p>Sie bewerten das aktuelle Fernsehprogramm auf einer Skala von 1 und 10
  durchschnittlich mit '.sprintf('%1.1f', $value).'. Deutschlandweit liegt
  dieser Wert im Mittel bei 6.3</p>
');
</code>

==== Einzelne Werte (II) ====

Eventuell möchte man dem Teilnehmer auch -- abhängig vom Ergebnis -- unterschiedliche Textbausteine anzeigen. Dafür kommt ein [[:de:create:filters|Filter]] zum Einsatz:

<code php>
// Wert/Ergebnis ermitteln
$value = valueMean('AB01_01', 'AB01_05', 'AB01_09');
// z-Transformation
$zValue = ($value - 5) / 2.8;
// Anzeige des richtigen Textbausteins
if ($value < 0) {
  // Keine gültigen Daten in $value - keine Ausgabe
} elseif ($zValue < -2) {
  text('resultExtraSD-2');
} elseif ($zValue < -1) {
  text('resultExtraSD-1');
} elseif ($zValue <= 1) {
  text('resultExtraSD-0');
} elseif ($zValue < 2) {
  text('resultExtraSD+1');
} else {
  text('resultExtraSD+2');
}
</code>


==== Mehrere Werte ====

Mehrere Werte werden häufig tabellarisch dargestellt. Am einfachsten funktioniert dies mit einem Textbaustein und Platzhaltern. Speichern Sie z.B. den folgenden HTML-Code unter **Textbausteine u. Beschriftungen** im neuen Textbaustein //results// (Darstellung "HTML-Code").

<code html>
<table cellspacing="5" cellpadding="0" border="0">
  <tr>
    <th>Eigenschaft</th>
    <th>Ihr Wert</th>
    <th>Vergleichswert</th>
  </tr>
  <tr>
    <td>Extraversion</td>
    <td>%val-extra%</td>
    <td>3.2</td>
  </tr>
  <tr>
    <td>Neurotizismus</td>
    <td>%val-neuro%</td>
    <td>2.4</td>
  </tr>
</table>
</code>

Die Platzhalter können anschließend direkt im Befehl ''[[:de:create:functions:text]]'' angegeben werden. Alternativ kann man ''[[:de:create:functions:replace]]'' verwenden.

<code php>
text('result', array(
  '%val-extra%' => valueMean('AB01_01', 'AB01_05', 'AB01_09'),
  '%val-neuro%' => valueMean('AB01_02', 'AB01_06', 'AB01_10')
));
</code>


===== Visuelle Darstellung =====

Für die visuelle Darstellung stehen unterschiedliche Möglichkeiten zur Verfügung.

==== Einzelne Werte ====

Für einzelne Werte (z.B. ein IAT-Ergebnis) bietet sich HTML-Code an, der eine Skala und darauf eine Markierung anzeigt.

{{:de:create:exp.feedback-visual.textelement.png?nolink|Beispiel für die visuelle Darstellung eines einzelnen Werts}}

Speichern Sie den folgenden HTML-Code als neuen Text im Fragenkatalog (im Folgenden wird angenommen, dass er die Kennung "RS01" erhält).

<code html>
<!-- Überschrift für die Abbildung -->
<div class="title" style="text-align: center">%title%</div>

<div style="position: relative">
  <!-- Die Skala liegt im Hintergrund -->
  <div style="margin: 0 auto; width: 400px; height: 25px; background-image:url('ofb://slider.scale.sd-blue400S')">
      <!-- Zur Platzierung der Markierung wird eine Einheit (Bereich 0 bis 1) als Blockelement platziert -->
      <div style="position: absolute; top: -2px; left: 50%; width: 65px; height: 27px">
        <!-- Die eigentliche Markierung wird an der richtigen Stelle eingefügt -->
        <img src="ofb://slider.button.rhomb" alt="" style="position: absolute; left: %zValue100%%; margin-left: -8px" />
      </div>
  </div>
</div>
</code>

Der HTML-Code verwendet zwei Platzhalter: ''%title%'' und ''%zValue100%''. Dieser HTML-Code ist dafür ausgelegt, einen z-Wert zwischen -3 und +3 anzuzeigen. Entsprechend sähe die Verwendung aus wie folgt:

<code php>
// Wert/Ergebnis ermitteln
$value = valueMean('AB01_01', 'AB01_05', 'AB01_09');
// z-Transformation
$zValue = ($value - 5) / 2.8;
// Extremwerte filtern
if ($zValue < -3) {
  $zValue = -3;
}
if ($zValue > 3) {
  $zValue = 3;
}
// Textbaustein verwenden (nur, wenn $value einen gültigen Wert geliefert hat)
if ($value > 0) {
  show('RS01', array(
    '%title%' => 'Extraversion',
    '%zValue100%' => (string)round($zValue * 100)
  ));
}
</code>


==== Mehrere Werte (I) ====

Mit Hilfe der Funktion ''[[:de:create:functions:diagram2]]'' lassen sich ausgewählte Diagramme im Fragebogen platzieren. Zur Verwendung sei auf die Dokumentation der Funktion verwiesen. Eine optimierte Funktion ''chart()'' wird in künftigen Versionen von SoSci Survey zur Verfügung stehen.


==== Mehrere Werte (II) ====

Mit der Bibliothek ChartJS können sehr schicke Diagramme im Fragebogen angezeigt werden. Wenn die Kategorie-Beschriftungen im Array ''$labels'' gespeichert sind, die Ergebnisse im Array ''$ownData'' und Referenzdaten im Array ''$refData'', kann man mit folgendem Text (im Beispiel hat er die Kennung "CH01", als //Darstellung// stellen Sie bitte "HTML_Code" ein) und dem zugehörigen PHP-Code ein Balken-Diagramm anzeigen. Erklärungen und Details sind der [[https://www.chartjs.org/|ChartJS Dokumentation]] zu entnehmen.

<code html>
<!-- Container für das Diagramm -->
<canvas id="myChart" width="400" height="300"></canvas>

<script type="text/javascript">
<!--

var chartCanvas = document.getElementById('myChart').getContext('2d');
var chart01 = new Chart(chartCanvas, {
    type: 'line',
    data: {
        labels: %labels%,
        datasets: [{
            label: 'Ihr Wert',
            data: %ownData%,
            backgroundColor: '#FF9900',
            borderColor: '#FFCCAA',
            pointRadius: 8
        }, {
            label: 'Durchschnitt',
            data: %refData%,
            backgroundColor: '#AAAAAA',
            borderColor: '#DDDDDD',
            pointRadius: 8
        }]
    },
    options: {
        indexAxis: 'y',
        scales: {
            x: {
                beginAtZero: true
            }
        }
    }
});

// -->
</script>
</code>

<code php>
// Bibliothek ChartJS verfügbar machen
library('ChartJS');

// Testdaten (hier würde man Daten aus dem Datensatz auslesen)
$labels = ['Motivation', 'Engagement', 'Qualifikation'];
$ownData = [57, 42, 80];
$refData = [52, 48, 74];

// Textbaustein mit dem HTML-Code für das Chart einbinden
show('TX09', [
  '%labels%' => json_encode($labels),
  '%ownData%' => json_encode($ownData),
  '%refData%' => json_encode($refData)
]);
</code>